﻿/**************************************************************************
* @file :	SqliteDatabase.h
* @brief :  
* @author : C0946639 尹志刚
* @version : 1.0.0.1
* @date :	2025/07/21
***************************************************************************/

#ifndef SQLITEDATABASE_H
#define SQLITEDATABASE_H

#include "common_global.h"

#include <QObject>
#include <QSqlDatabase>

namespace Common {

	class SqliteDatabase : public QObject
	{
		Q_OBJECT

	public:
		explicit SqliteDatabase(QObject *parent = nullptr);
		virtual ~SqliteDatabase();

	public:
		/**
		 * @brief   open 打开数据库
		 * @param   strDBName 需要打开的数据库名称，为空就使用默认的数据库名称
		 * @return  是否打开成功
		 * @note    1.如果数据库已打开，但strDBName与当前打开的不一致，则会关闭当前数据库后重新打开
						只有当前线程没有打开过连接时是真正的打开，其余只是内部的引用计数+1
					2.错误时，使用 getLastError 查看错误信息
		 */
		bool open(QString strDBName = "");

		/**
		 * @brief   close 关闭数据库
		 * @param   strDBName 需要关闭的数据库名称，为空就使用当前已打开的数据库
		 * @return  是否关闭成功
		 * @note   1.关闭某一个数据库的连接，如果未指定则使用当前已打开的连接,这个不是真正的关闭连接，
					只有当内部的引用计数减少为0时才会真正的关闭连接
				 2.错误时，使用 getLastError 查看错误信息
		 */
		bool close(QString strDBName = "");
		
		/**
		* @brief   getDatabase 获取对应数据库名称的Database，如果数据库未打开则会先打开数据库
		* @param   strDBName 数据库名称
		* @return  返回对应的Database
		* @note    如果当前线程的连接关闭，则QSqlDatabase就会失效，请勿保存QSqlDatabase在副本中
		*/
		QSqlDatabase getDatabase(QString strDBName = "");

	private:
		QString m_strDBName;				// 数据库名称
		QString m_strError;					// 错误信息
	};

}

#endif // SQLITEDATABASE_H